package com.javasoft.controller.LCB;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.javasoft.entity.LCB.UserInfoEntity;
import com.javasoft.service.LCB.UserInfoService;
import com.javasoft.vo.LCB.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;

//@CrossOrigin("*")//跨域问题解决方法，在最后要实现前后端连接的时候再考虑这个问题，暂放
@RestController
@RequestMapping("/LCB")
public class UserInfoController {

    @Autowired
    private UserInfoService userInfoService;//service接口注入controller

    /***
     * 分页列表 模糊查询（
     * 这个查询功能可以支持任意有关词条的查询：
     * 例如 我搜索用户的姓名，或者email，或者账户名account，都能出现对应的那个人的信息
     * 但是暂时不支持多词条查询，例如同时输入id和name，要是匹配，可以找到对应的用户
     * 但是如果不匹配的话，就无法找到，不会找到两个对应的用户，最后是返回报错信息
     * @param name
     * @param current//这是当前是第几页的
     * @param size//这是一页里面有几个数据条
     * @return
     */
    @GetMapping("/page" )//不会改变的用get
    public Page<UserInfoEntity>page(
            @RequestParam(defaultValue = "") String name,
            @RequestParam(defaultValue = "1") Integer current,
            @RequestParam(defaultValue = "10") Integer size
    ){
        return userInfoService.page(current,size,name);
    }//分页操作在这里完成

    /**
     * 数据保存与新增
     * 新增与修改信息在一个程序里
     * 新增就直接丢信息就好了，id不用输入
     * 但是修改信息需要输入对应的id进行改变
     * @param userInfoEntity
     * @return
     */

    @PostMapping("/save")//需要改变数据库的用post
    public boolean save(@RequestBody UserInfoEntity userInfoEntity){
        return userInfoService.saveOrUpdateById(userInfoEntity);
    }//新增与保存

    /***
     * 单选删除与批量删除（id实现）
     * 删除的一个大问题，就是无法实现id的改变
     * 12.29跟进：似乎id不需要改变，对应的id就对应他用户本身，删
     *           除了用户确实应该对应的id应该跟着消失
     * @param ids
     * @return
     */
    @PostMapping("/deleteByIds")
    public boolean delete(@RequestBody List<Integer> ids){
        return  userInfoService.deleteBacthIds(ids);
    }//删除用的接口

    /***
     *这里尝试实现进行用户名对应的删除模式（name实现）12.29看看能不能实现
     * @param names
     * @return
     */
    @PostMapping("/deleteByNames")
    public boolean batchDeleteByNames(@RequestBody List<String> names) {
        return userInfoService.deleteBatchByNames(names);
    }


    /**
     * 这里尝试实现对csv文件形式的用户批量导入功能12.30晚
     * 12.31下午完成
     * @param file
     * @return
     */
    @PostMapping("/batchImportByFile")
    public String uploadCSV(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "请选择一个文件上传";
        }

        try {
            if (userInfoService.batchImportByFile(file)) {
                return "用户数据上传成功!";
            } else {
                return "用户数据上传失败";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败: " + e.getMessage();
        }
    }

/// 这里是通过Json形式，在postman测试多条信息以数组的形式存入数据库中
    @PostMapping("/batchImportByJson")
    public String batchImportByJson(@RequestBody List<UserInfoEntity> userInfoEntities) {
        if (userInfoEntities == null || userInfoEntities.isEmpty()) {
            return "找不到用户信息";
        }

        try {
            for (UserInfoEntity userInfoEntity : userInfoEntities) {
                if (isEmpty(userInfoEntity)) {
                    continue; // 或者你可以选择跳过或记录错误
                }
                if (!userInfoService.batchImportByJson(userInfoEntity)) {
                    return "用户数据上传失败";
                }
            }
            return "用户数据成功添加!";
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败: " + e.getMessage();
        }
    }
    private boolean isEmpty(UserInfoEntity userInfoEntity) {
        return (userInfoEntity.getAccount() == null || userInfoEntity.getAccount().isEmpty())
                && (userInfoEntity.getPassword() == null || userInfoEntity.getPassword().isEmpty())
                && (userInfoEntity.getName() == null || userInfoEntity.getName().isEmpty())
                && (userInfoEntity.getEmail() == null || userInfoEntity.getEmail().isEmpty())
                && (userInfoEntity.getUserClass() == null)
                && (userInfoEntity.getGender() == null || userInfoEntity.getGender().isEmpty())
                && (userInfoEntity.getPermission() == null);
    }

/// 通过x-www-form-urlencoded形式在postman中进行测试登录
/// 完成用户的登录系统（无前端版）1.8
    @PostMapping("/login")
    public String login(@RequestParam("account") String account, @RequestParam("password") String password) {
        if (userInfoService.login(account, password)) {
            return "登录成功!";
        } else {
            return "登录失败（账户不存在或密码错误）";
        }
    }


}












/***
    @PostMapping("insertUser")
    public String insertUser(@RequestBody UserInfoEntity user){
        Integer  i=userInfoService.add(user);
        if(i==0){
            return "Inserted successfully";
        }
        else {
            return "failed";
        }
    }

    public IPage list(@RequestBody UserVo userVo){
        UserInfoEntity user = new UserInfoEntity();

        user.setAccount(userVo.getAccount());
        user.setUserClass(userVo.getUser_class());
        user.setEmail(userVo.getEmail());
        user.setGender(userVo.getGender());
        user.setName(userVo.getName());
        user.setPassword(userVo.getPassword());
        user.setPermission(userVo.getPermission());

        return userInfoService.page(user,userVo.getPage(),userVo.getPageline());

    }
***/

